/** @file CommonDebug.h */
#ifndef GCLDEBUG_H_
#define GCLDEBUG_H_

#include <stdarg.h>
namespace Common
{
enum
{
	LEVEL_ERROR = 0,///<
	LEVEL_CRITICAL = 1,///<
	LEVEL_WARNING = 2,///<
	LEVEL_MESSAGE = 3,///<
	LEVEL_DEBUG = 4,
};

enum
{
	DEBUG_OUTPUT_STD = 0,///<
	DEBUG_OUTPUT_LOGFILE = 1,///<
	DEBUG_OUTPUT_NULL = 2,
///<
};
#ifndef DEBUG_LOG_FILE_PATH
#define DEBUG_LOG_FILE_PATH  "/tmp/"
#endif

/**
 * @def DEBUG_SETLEVEL(level, output)
 * @brief 设置模块调试等级
 * @param level 调试等级
 */
#define DEBUG_SETLEVEL(level, output) gclDebugSetLevel((level), (output))

/**
 @def DEBUG_ERROR(fmt...)
 @brief	调试信息打印宏. 参数格式同printf. \n
 @b Example: \n
 - DEBUG_ERROR("this is test %s, %d", "hello", 1234 );
 .
 */
#define DEBUG_ERROR(fmt...) gclDebugPrintf(Common::LEVEL_ERROR, __FILE__, __FUNCTION__, __LINE__, fmt)
/**
 @def DEBUG_CRITICAL(fmt...)
 @brief	调试信息打印宏. 参数格式同 DEBUG_ERROR. \n
 */
#define DEBUG_CRITICAL(fmt...) gclDebugPrintf(Common::LEVEL_CRITICAL, __FILE__, __FUNCTION__, __LINE__, fmt)
/**
 @def DEBUG_WARNING(fmt...)
 @brief	调试信息打印宏. 参数格式同 DEBUG_ERROR. \n
 */
#define DEBUG_WARNING(fmt...) gclDebugPrintf(Common::LEVEL_WARNING, __FILE__, __FUNCTION__, __LINE__, fmt)
/**
 @def DEBUG_MESSAGE(fmt...)
 @brief	调试信息打印宏. 参数格式同 DEBUG_ERROR. \n
 */
#define DEBUG_MESSAGE(fmt...) gclDebugPrintf(Common::LEVEL_MESSAGE, __FILE__, __FUNCTION__, __LINE__, fmt)
/**
 @def DEBUG_DEBUG(fmt...)
 @brief	调试信息打印宏. 参数格式同 DEBUG_ERROR. \n
 */
#define DEBUG_DEBUG(fmt...) gclDebugPrintf(Common::LEVEL_DEBUG, __FILE__, __FUNCTION__, __LINE__, fmt)

int gclDebugSetLevel(int level, int output);

void gclDebugPrintf(int level, const char *file, const char *func, int line, const char *fmt, ...);

}
#endif /*GCLDEBUG_H_*/
